﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using System.IO;
using System.Transactions;
using System.Data.Objects;

namespace Tema2_Adabd.DataLayer
{
    public partial class AccesBazaDeDate
    {
        public List<Produse> filtrareDupaNume(string numeProdus)
        {
            List<Produse> produse = new List<Produse>();
            using (var db = new Tema2Entities1())
            {
                produse = (from Produse in db.Produses
                           where Produse.disabled_ == false && Produse.nume_produs == numeProdus
                           select Produse).ToList();
            }
            return produse;
        }

        public List<Produse> filtrareDupaBrand(string numeBrand)
        {
            List<Produse> produse = new List<Produse>();
            using (var db = new Tema2Entities1())
            {
                produse = (from p in db.Produses
                           join brand in db.Brands on p.brand_id equals brand.id_brand
                           where brand.brand1==numeBrand
                           where p.disabled_ == false                 
                           select p).ToList();
            }
            return produse;
        }

        public List<Produse> filtrareDupaStoc(int stocProdus)
        {
            List<Produse> produse = new List<Produse>();
            using (var db = new Tema2Entities1())
            {
                produse = (from Produse in db.Produses
                           where Produse.disabled_ == false && Produse.stoc == stocProdus
                           select Produse).ToList();
            }
            return produse;
        }

        public List<Produse> filtrareDupaCod(int codProdus)
        {
            List<Produse> produse = new List<Produse>();
            using (var db = new Tema2Entities1())
            {
                produse = (from Produse in db.Produses
                           where Produse.disabled_ == false && Produse.stoc == codProdus
                           select Produse).ToList();
            }
            return produse;
        }

        public List<Produse> filtrareProduseSterseTemporar()
        {
            List<Produse> produse = new List<Produse>();
            using (var db = new Tema2Entities1())
            {
                produse = (from Produse in db.Produses
                           where Produse.disabled_ == true
                           select Produse).ToList();
            }
            return produse;
        }


        public int brandID(string numeBrand)
        {
            int id;
            using (var db = new Tema2Entities1())
            {
                id = (from Branduri in db.Brands
                      where Branduri.brand1 == numeBrand
                      select Branduri.id_brand).First();
            }
            return id;
        }

        public List<Produse> toateProdusele()
        {
            List<Produse> produse = new List<Produse>();
            using (var db = new Tema2Entities1())
            {
                produse = (from p in db.Produses
                           where p.disabled_ == false
                            select p).ToList();
            }
            return produse;
        }

        static DataTable ConvertListToDataTable(List<string[]> list)
        {
            // New table.
            DataTable table = new DataTable();

            // Get max columns.
            int columns = 0;
            foreach (var array in list)
            {
                if (array.Length > columns)
                {
                    columns = array.Length;
                }
            }

            // Add columns.
            for (int i = 0; i < columns; i++)
            {
                table.Columns.Add();
            }

            // Add rows.
            foreach (var array in list)
            {
                table.Rows.Add(array);
            }

            return table;
        }

        
        public List<Produse> filtrareProduseDupaPret(decimal inf,decimal sup)
        {
            List<Produse> produse = new List<Produse>();
            using (var db = new Tema2Entities1())
            {
                produse = (from p in db.Produses
                           where p.disabled_ == false && p.pret <= sup && p.pret >= inf
                           select p).ToList();
            }
            return produse;
        }

        public List<Produse> produseSortate(string sortExpr, string sortDir)
        {
            List<Produse> produse = new List<Produse>();
            using (var db = new Tema2Entities1())
            {
                var query=from p in db.Produses
                          where p.disabled_==false
                          select p;

                if (sortDir == "ASC")
                    switch (sortExpr)
                    {
                        case "nume_produs":
                            produse = query.OrderBy(s => s.nume_produs).ToList();
                            break;
                        case "pret":
                            produse = query.OrderBy(s => s.pret).ToList();
                            break;
                        case "stoc":
                            produse = query.OrderBy(s => s.stoc).ToList();
                            break;
                        case "cod_unic":
                            produse = query.OrderBy(s => s.cod_unic).ToList();
                            break;
                        default:
                            throw new Exception("Expresie de sortare gresita.");
                    }
                else
                    switch (sortExpr)
                    {
                        case "nume_produs":
                            produse = query.OrderByDescending(s => s.nume_produs).ToList();
                            break;
                        case "pret":
                            produse = query.OrderByDescending(s => s.pret).ToList();
                            break;
                        case "stoc":
                            produse = query.OrderByDescending(s => s.stoc).ToList();
                            break;
                        case "cod_unic":
                            produse = query.OrderByDescending(s => s.cod_unic).ToList();
                            break;
                        default:
                            throw new Exception("Expresie de sortare gresita.");
                    }

            }
            return produse;
        }

        public List<string> daCats()
        {
            List<string> list;
            using (var db = new Tema2Entities1())
            {
                list = db.CategoriiE().ToList();
            }

            return list;
        }

        public List<Produse> cautaProdus(string numeProdus)
        {
            List<Produse> produs;
            using (var db = new Tema2Entities1())
            {
                produs = (from p in db.Produses
                             where p.nume_produs==numeProdus && p.disabled_==false
                             select p).ToList();
            }

            return produs;
        }

    }
}